package com.example.hms.service.serviceImpl;

import com.example.hms.Dao.DashboardDao;
import com.example.hms.entity.Dashboard;
import com.example.hms.service.DashboardService;
import com.example.hms.ulit.Result;
import com.example.hms.ulit.ResultSubmit;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

// 定义服务实现类，实现DashboardService接口
@Service
public class DashboardServiceImpl implements DashboardService {
    // 注入DashboardDao数据访问对象
    @Resource
    private DashboardDao dao;
    // 查询房间数量，调用DAO层方法并返回成功结果
    @Override
    public Result selectRoomNumber() {
        return ResultSubmit.success(dao.selectRoomNumber());
    }
    // 查询入住人数，调用DAO层方法并返回成功结果
    @Override
    public Result selectLiveNumber() {
        return ResultSubmit.success(dao.selectLiveNumber());
    }
    // 查询指定月份的收入，将月份格式化为"yyyy-MM-01 00:00:00"后调用DAO层方法
    @Override
    public Result selectRevenue(String month) {
        month = month + "-01 00:00:00";
        return ResultSubmit.success(dao.selectRevenue(month));
    }
    // 查询最近6个月的收入数据汇总
    @Override
    public Result selectRevenueByMonth(String month) {
        // 创建列表用于存储多个月份的收入数据
        List<Dashboard> 多月查询数据汇总 = new ArrayList<>();
        // 循环6次获取最近6个月的数据
        for (int i = 0; i < 6; i++) {
            // 创建单月收入信息对象
            Dashboard 单月收入信息 = new Dashboard();
            // 设置当前月份
            单月收入信息.setMonth(month);
            // 查询当前月份的收入并设置到对象中
            单月收入信息.setMoney(dao.selectRevenue(month + "-01 00:00:00"));
            // 将单月收入信息添加到汇总列表
            多月查询数据汇总.add(单月收入信息);
            // 更新月份为前一个月
            month = monthUpdate1(month);
        }
        // 返回成功结果和多个月份的收入数据
        return ResultSubmit.success(多月查询数据汇总);
    }
    // 将月份字符串减少一个月（方法1）
    private String monthUpdate1(String month) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
        Date date = null;
        try {
            // 解析月份字符串为Date对象
            date = format.parse(month);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        // 使用Calendar进行日期计算
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        // 减去一个月
        calendar.add(Calendar.MONTH, -1);
        // 格式化回"yyyy-MM"字符串
        return format.format(calendar.getTime());
    }
    // 将月份字符串减少一个月（方法2）
    private String monthUpdate2(String month) {
        // 使用StringBuffer方便修改字符串
        StringBuffer stringBuffer = new StringBuffer(month);
        // 提取年份部分
        int year = Integer.parseInt(stringBuffer.substring(0, 4));
        // 提取月份部分（注意substring的结束索引是不包含的）
        int month1 = Integer.parseInt(stringBuffer.substring(5, 7));
        // 如果当前月份是1月，则年份减1，月份设为12
        if (month1 == 1) {
            year = year - 1;
            month1 = 12;
        } else {
            // 否则月份减1
            month1 = month1 - 1;
        }
        // 如果月份小于10，前面补0
        if (month1 < 10) {
            return year + "-0" + month1;
        }
        // 否则直接返回"yyyy-M"格式
        return year + "-" + month1;
    }
}
